var projektil = []; //zum halten von mehreren unterschiedliche Projetile
var sphereMaterial = new t.MeshBasicMaterial({color: 0x441111});
var sphereGeo = new t.SphereGeometry(2, 6, 6);
//funktion für unsere erstes einfache Kugel
function createBullet(object) {
	if(Boolean(object)==false){
		object = cam;
		
	}
	var bullet = new t.Mesh(sphereGeo, sphereMaterial);
	
	if(object == cam){
		bullet.position.set(object.position.x , object.position.y, object.position.z );
		//erster funktioniernder versuch muss noch überarbeitet werden
		var vector = new t.Vector3(mouse.x, mouse.y, 1);
		projector.unprojectVector(vector, object);
		bullet.ray = new t.Ray(
			object.position,
			vector.sub(object.position).normalize()
		);
	}
	else if(object == boss){
		bullet.position.set(object.core.position.x , object.core.position.y, object.core.position.z );
		var vector = new t.Vector3(cam.position.x, cam.position.y, cam.position.z);
		//console.log(bullet.position, vector);
		bullet.ray = new t.Ray(
			bullet.position,
			vector.sub(bullet.position).normalize()
		); 
	}
	else{
		bullet.position.set(object.gegner.position.x , object.gegner.position.y, object.gegner.position.z );
		var vector = new t.Vector3(cam.position.x, cam.position.y, cam.position.z);
		//console.log(bullet.position, vector);
		bullet.ray = new t.Ray(
			bullet.position,
			vector.sub(bullet.position).normalize()
		); 
		//console.log(bullet.ray);
	}
	//Damit später differenziert werden kann von wem es stammt
	bullet.owner = object;
	
	bullet.add(new t.PointLight(0x990000, 10 ,500));

	
	projektil.push(bullet);
	scene.add(bullet);
	
	//bullet.add(new THREE.PointLight(0x0000ff, 10 ,500));
	//console.log(bullet, 1);
	sSound();
	return bullet;
	bullet.add(new t.PointLight(0x0000ff, 1, 500 ));
}


// linke maustaste zum "schie�en"
$(document).click(function(e) {
	e.preventDefault;
	if (e.which === 1) {
		checkPlayerCooldown();
	}
});


//Variabeln für einen Cooldown und zum verhindern das gleich nach dem start
//die Action der linken maustaste ausgeführt wird
var check = 0;	
//var cd = 1; //coolDown 1 noch nicht ready 0 ist Ready
var cd = date.getTime();
function checkPlayerCooldown(){
	if(check == 0){
		check = 1;
	}
	else{
		var date = new Date();
		camTimeCheck = date.getTime();
		if(cd+1000 <= camTimeCheck){
			cd = date.getTime();
			createBullet();		
		}
	}
}

function updateProjektil(speed){
	for (var i = projektil.length-1; i >= 0; i--) { //rückwärszählen zur einfacheren entfernen der projectile
		var b = projektil[i], p = b.position, d = b.ray.direction, o = b.owner;
		//checkwallCollision um dein projektiel das eine Wand berührt wieder herauszunehmen
		if (checkWallCollision(p)) {
			projektil.splice(i, 1);
			scene.remove(b);
			continue;
		}
		if(o == cam){
			//for schleife um durch das Array geg durchzugehnen um kollisionen mit Gegnern zuüberprüfen
			for (var j = geg.length-1; j >= 0; j--) {
				var a = geg[j];
				//console.log(geg[j], j)
				//if konntrolle ob ein Projektil
				if(	p.x < a.gegner.geometry.boundingBox.max.x && p.x > a.gegner.geometry.boundingBox.min.x &&
					p.y < a.gegner.geometry.boundingBox.max.y && p.y > a.gegner.geometry.boundingBox.min.y &&
					p.z < a.gegner.geometry.boundingBox.max.z && p.z > a.gegner.geometry.boundingBox.min.z){
					
					if(hpGegner(a)){
						geg.splice(j, 1);
						scene.remove(a.gegner);
						spawnHeal(a.gegner.position.x, a.gegner.position.y, a.gegner.position.z);
						//aktualisiert den die anzahl restlicher gegner im interface
						document.getElementById("gegnerAnzahl").innerHTML = geg.length;
					}
					projektil.splice(i, 1);
					scene.remove(b);
				


				break;
				}
			}
			
					//for schleife um durch das Array geg durchzugehnen um kollisionen mit Gegnern zuüberprüfen
			if(minen.length != 0){
				for (var j = minen.length-1; j >= 0; j--) {
					var a = minen[j];
					//console.log(minen[j], j)
				//if konntrolle ob ein Projektil
				if(	p.x < a.mine.geometry.boundingBox.max.x && p.x > a.mine.geometry.boundingBox.min.x &&
					p.y < a.mine.geometry.boundingBox.max.y && p.y > a.mine.geometry.boundingBox.min.y &&
					p.z < a.mine.geometry.boundingBox.max.z && p.z > a.mine.geometry.boundingBox.min.z){
					
					minen.splice(j, 1);
					scene.remove(a.mine);
					projektil.splice(i, 1);
					scene.remove(b);
					break;
					}
				}
			}
			
		 	if(bosse.length != 0){
				boss = bosse[0];
				for(var j = 0; j <= 7; j++){
				var checkArmor = boss.core.children[j];
				checkArmor.geometry.boundingBox = new t.Box3().setFromObject(checkArmor);
				
				//console.log(p,x,y,z, checkArmor.geometry.boundingBox, boss.core.position);	
					if(	p.x < checkArmor.geometry.boundingBox.max.x && p.x > checkArmor.geometry.boundingBox.min.x &&
						p.y < checkArmor.geometry.boundingBox.max.y && p.y > checkArmor.geometry.boundingBox.min.y &&
						p.z < checkArmor.geometry.boundingBox.max.z && p.z > checkArmor.geometry.boundingBox.min.z){
						console.log("???");
						projektil.splice(i, 1);
						scene.remove(b);
						break;
					}
				}
				var core = boss.core.geometry.boundingBox;
				if(	p.x < core.max.x && p.x > core.min.x &&
					p.y < core.max.y && p.y > core.min.y &&
					p.z < core.max.z && p.z > core.min.z){
						console.log("auaaa");
						if(hpBoss(boss)){
							bosse.splice(0, 1);
							scene.remove(boss.core);
						}
						projektil.splice(i, 1);
						scene.remove(b);
						break;
				}
			} 
		}
		if(o != cam){
			//console.log(p.x,cam.position.x);
			if(	p.x < cam.position.x+50 && p.x > cam.position.x-50 &&
				p.y < cam.position.y+50 && p.y > cam.position.y-50 &&
				p.z < cam.position.z+50 && p.z > cam.position.z-50){
				//console.log("peng", o);
				hpChange(o.dm);				
				projektil.splice(i, 1);
				scene.remove(b);
				break;
			}
			
		}
    //eigendlicher positions update  
		
			b.translateX(speed * d.x);
			b.translateY(speed * d.y);
			b.translateZ(speed * d.z);
		
	}
}

//hpGegner wird verwendet um hp veränderungen der Gegner zu bewirken
function hpGegner(gegner){
	gegner.hitPoints = gegner.hitPoints + (-40);
	var core = gegner.gegner.children[0];
	var color = core.material.color, percent = gegner.hitPoints / 100;
	core.material.color.setRGB(
		percent * color.r,
		percent * color.g,
		percent * color.b
	);
	
	if(gegner.hitPoints < 0){
		//console.log(gegner.hitPoints);
		return 1;
	}
	else{
		return 0;
	}
}
//hpBoss wird verwendet um hp veränderungen des Bosses zu bewirken
function hpBoss(boss){
	boss.hitPoints = boss.hitPoints + (-40);
	var core = boss.core;
	var color = core.material.color, percent = boss.hitPoints / 100;
	core.material.color.setRGB(
		percent * color.r
	);
	console.log(boss);
	if(boss.hitPoints < 0){
		return 1;
	}
	else{
		return 0;
	}
}

//ermöglicht mehre male paralel das abspielen des Schuss sounds
function sSound(){
	shootSound = new Audio('Sounds/shoot.mp3');
	shootSound.play();
}

